﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BLL.BusinessClasses;

namespace WebSite.Egresado
{
    public partial class Aplicaciones : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.Session["UsuarioDeSesion"] == null || !(this.Session["UsuarioDeSesion"] is UsuarioUniversitario))
            {
                this.Response.Redirect(@"~/General/Principal.aspx");
                return;
            }
            if (!(this.Page.IsPostBack))
            {
                this.DarBienvenida();
            }
        }

        protected void Button_LogOff_Click(object sender, EventArgs e)
        {
            this.Session["UsuarioDeSesion"] = null;

            this.Response.Redirect(@"~/General/Principal.aspx");
        }

        protected void Esconder_ContenidoPagina()
        {
            if (this.Panel_AplicacionesActivas.Visible)
            {
                this.Panel_AplicacionesActivas.Visible = false;
                this.Button_MostrarPanelAplicacionesActivas.Text = "▼";
            }

            if (this.Panel_AplicacionesInactivas.Visible)
            {
                this.Panel_AplicacionesInactivas.Visible = false;
                this.Button_MostrarAplicacionesInactivas.Text = "▼";
            }
        }

        // Show/Hide Event Handlers
        protected void Button_MostrarPanelAplicacionesActivas_Click(object sender, EventArgs e)
        {
            Esconder_ContenidoPagina();

            this.Panel_AplicacionesActivas.Visible = !(this.Panel_AplicacionesActivas.Visible);
            this.Panel_DatosVacante.Visible = false;
            this.GridView_AplicacionesActivas.SelectedIndex = -1;

            if (this.Panel_AplicacionesActivas.Visible)
            {
                PoblarCampos_Panel_AplicacionesActivas();
                this.Button_MostrarPanelAplicacionesActivas.Text = "▲";
            }
            else this.Button_MostrarPanelAplicacionesActivas.Text = "▼";
        }

        protected void Button_MostrarAplicacionesInactivas_Click(object sender, EventArgs e)
        {
            Esconder_ContenidoPagina();

            this.Panel_AplicacionesInactivas.Visible = !(this.Panel_AplicacionesInactivas.Visible);
            this.Panel_DatosVacanteAplicacionInactiva.Visible = false;
            this.GridView_AplicacionesInactivas.SelectedIndex = -1;

            if (this.Panel_AplicacionesInactivas.Visible)
            {
                PoblarCampos_Panel_AplicacionesInactivas();
                this.Button_MostrarAplicacionesInactivas.Text = "▲";
            }
            else this.Button_MostrarAplicacionesInactivas.Text = "▼";
        }

        // Button_Click Event Handlers
        protected void Button_DesactivarAplicacion_Click(object sender, EventArgs e)
        {
            ((UsuarioUniversitario)this.Session["UsuarioDeSesion"]).DesactivarAplicacion(Convert.ToInt32(this.GridView_AplicacionesActivas.SelectedValue));

            this.GridView_AplicacionesActivas.SelectedIndex = -1;
            this.PoblarCampos_Panel_AplicacionesActivas();
            this.PoblarCampos_Panel_AplicacionesInactivas();
        }
        protected void Button_ActivarAplicacion_Click(object sender, EventArgs e)
        {
            ((UsuarioUniversitario)this.Session["UsuarioDeSesion"]).ActivarAplicacion(Convert.ToInt32(this.GridView_AplicacionesInactivas.SelectedValue));

            this.GridView_AplicacionesInactivas.SelectedIndex = -1;
            this.PoblarCampos_Panel_AplicacionesInactivas();
            this.PoblarCampos_Panel_AplicacionesActivas();
        }

        // Helper Methods
        private void DarBienvenida()
        {
            ((Label)(this.Master.FindControl("Label_Bienvenida"))).Text = "Bienvenido <u>" +
                                                                          ((UsuarioUniversitario)this.Session["UsuarioDeSesion"]).PrimerNombre + " " +
                                                                          ((UsuarioUniversitario)this.Session["UsuarioDeSesion"]).PrimerApellido + "</u>";
        }
        private void PoblarCampos_Panel_AplicacionesActivas()
        {
            this.GridView_AplicacionesActivas.DataSource = from a in ((UsuarioUniversitario)this.Session["UsuarioDeSesion"]).Aplicaciones
                                                           where a.SiActiva == true
                                                           select new
                                                           {
                                                               ID = a.ID,
                                                               Comentario = a.Comentario,
                                                               FechaPublicacion = a.FechaPublicacion,
                                                               VacanteEmpresa = a.VacanteAplicada.Publicante.Nombre,
                                                               VacantePuesto = a.VacanteAplicada.Puesto,
                                                               VacanteCarrera = a.VacanteAplicada.Carrera.Descripcion
                                                           };

            this.GridView_AplicacionesActivas.DataBind();
        }
        private void PoblarCampos_Panel_AplicacionesInactivas() 
        {
            this.GridView_AplicacionesInactivas.DataSource = from a in ((UsuarioUniversitario)this.Session["UsuarioDeSesion"]).Aplicaciones
                                                             where a.SiActiva == false
                                                             select new
                                                             {
                                                                 ID = a.ID,
                                                                 Comentario = a.Comentario,
                                                                 FechaPublicacion = a.FechaPublicacion,
                                                                 VacanteEmpresa = a.VacanteAplicada.Publicante.Nombre,
                                                                 VacantePuesto = a.VacanteAplicada.Puesto,
                                                                 VacanteCarrera = a.VacanteAplicada.Carrera.Descripcion
                                                             };

            this.GridView_AplicacionesInactivas.DataBind();
        }

        protected void GridView_AplicacionesActivas_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Panel_DatosVacante.Visible = true;
            this.Button_DesactivarAplicacion.Enabled = true;

            string ParameterValue = Vacante.GetVacanteByAplicacionID(Convert.ToInt32(this.GridView_AplicacionesActivas.SelectedValue)).ID.ToString();

            //this.LinqDataSource_DatosVacanteAplicacionActiva.Where = "ID == @ID_Vacante";
            this.LinqDataSource_DatosVacanteAplicacionActiva.WhereParameters.Clear();
            this.LinqDataSource_DatosVacanteAplicacionActiva.WhereParameters.Add(new Parameter("ID_Vacante", DbType.Int32, ParameterValue));

            //this.LinqDataSource_DatosVacanteHabilidadesAplicacionActiva.Where = "ID_Vacante == @ID_Vacante";
            this.LinqDataSource_DatosVacanteHabilidadesAplicacionActiva.WhereParameters.Clear();
            this.LinqDataSource_DatosVacanteHabilidadesAplicacionActiva.WhereParameters.Add(new Parameter("ID_Vacante", DbType.Int32, ParameterValue));

            //this.LinqDataSource_DatosVacanteEspecialidadesAplicacionActiva.Where = "ID_Vacante == @ID_Vacante";
            this.LinqDataSource_DatosVacanteEspecialidadesAplicacionActiva.WhereParameters.Clear();
            this.LinqDataSource_DatosVacanteEspecialidadesAplicacionActiva.WhereParameters.Add(new Parameter("ID_Vacante", DbType.Int32, ParameterValue));
        }
        protected void GridView_AplicacionesInactivas_SelectedIndexChanged(object sender, EventArgs e)
        {
            Vacante VacanteDeAplicacion = Vacante.GetVacanteByAplicacionID(Convert.ToInt32(this.GridView_AplicacionesInactivas.SelectedValue));

            if (VacanteDeAplicacion.SiActiva == true)
            {
                this.Panel_DatosVacanteAplicacionInactiva.Visible = true;
                this.Button_ActivarAplicacion.Enabled = true;

                //this.LinqDataSource_DatosVacanteAplicacionActiva.Where = "ID == @ID_Vacante";
                this.LinqDataSource_DatosVacanteAplicacionInactiva.WhereParameters.Clear();
                this.LinqDataSource_DatosVacanteAplicacionInactiva.WhereParameters.Add(new Parameter("ID_Vacante", DbType.Int32, VacanteDeAplicacion.ID.ToString()));

                //this.LinqDataSource_DatosVacanteHabilidadesAplicacionActiva.Where = "ID_Vacante == @ID_Vacante";
                this.LinqDataSource_DatosVacanteHabilidadesAplicacionInactiva.WhereParameters.Clear();
                this.LinqDataSource_DatosVacanteHabilidadesAplicacionInactiva.WhereParameters.Add(new Parameter("ID_Vacante", DbType.Int32, VacanteDeAplicacion.ID.ToString()));

                //this.LinqDataSource_DatosVacanteEspecialidadesAplicacionActiva.Where = "ID_Vacante == @ID_Vacante";
                this.LinqDataSource_DatosVacanteEspecialidadesAplicacionInactiva.WhereParameters.Clear();
                this.LinqDataSource_DatosVacanteEspecialidadesAplicacionInactiva.WhereParameters.Add(new Parameter("ID_Vacante", DbType.Int32, VacanteDeAplicacion.ID.ToString()));
            }
            else 
            {
                this.Label_MensajeErrorVacanteInactiva.Visible = true;
            }
        }

        // Page Expressions Methods
        protected object EvaluateIfPuestoEqualsNull_Aplicaiones()
        {
            return (Eval("VacantePuesto") == null) ? "<span class=\"LetraRoja\">No Especificado</span>" : Eval("VacantePuesto");
        }
        protected object EvaluateIfPuestoEqualsNull()
        {
             return (Eval("Puesto") == null) ? "<span class=\"LetraRoja\">No Especificado</span>" : Eval("Puesto");
        }
        protected object EvaluateIfComentarioEqualsNull()
        {
            return (((string)Eval("Comentario")) == String.Empty) ? "<span class=\"LetraRoja\">No Hay Comentarios</span>" : Eval("Comentario");
        }
        protected object ContarAplicacionesActivas()
        {
            return new Vacante(Convert.ToInt32(Eval("ID"))).Aplicaciones.Count(a => a.SiActiva);
        }

        protected void GridView_DatosVacanteAplicacionActiva_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Retrieve the GridView control in the second column.
                if (((string)DataBinder.Eval(e.Row.DataItem, "Empresa.Foto")) != null)
                {
                    ((Image)e.Row.FindControl("Image_LogoEmpresa")).ImageUrl = ((string)DataBinder.Eval(e.Row.DataItem, "Empresa.Foto"));
                }
                else
                {
                    ((Image)e.Row.FindControl("Image_LogoEmpresa")).ImageUrl = "~\\Pictures\\CompanyPictures\\DefaultCompanyPic.png";
                }

                if (((ListBox)e.Row.FindControl("ListBox_DatosVacanteHabilidades")).Items.Count == 0)
                {
                    ((ListBox)e.Row.FindControl("ListBox_DatosVacanteHabilidades")).Visible = false;
                    ((Label)e.Row.FindControl("Label_DatosVacanteNoHabilidades")).Visible = true;
                }
                if (((ListBox)e.Row.FindControl("ListBox_DatosVacanteEspecialidades")).Items.Count == 0)
                {
                    ((ListBox)e.Row.FindControl("ListBox_DatosVacanteEspecialidades")).Visible = false;
                    ((Label)e.Row.FindControl("Label_DatosVacanteNoPostgrados")).Visible = true;
                }
            }
        }

        protected void GridView_DatosVacanteAplicacionInactiva_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Retrieve the GridView control in the second column.
                if (((string)DataBinder.Eval(e.Row.DataItem, "Empresa.Foto")) != null)
                {
                    ((Image)e.Row.FindControl("Image_LogoEmpresa")).ImageUrl = ((string)DataBinder.Eval(e.Row.DataItem, "Empresa.Foto"));
                }
                else
                {
                    ((Image)e.Row.FindControl("Image_LogoEmpresa")).ImageUrl = "~\\Pictures\\CompanyPictures\\DefaultCompanyPic.png";
                }

                if (((ListBox)e.Row.FindControl("ListBox_DatosVacanteHabilidades")).Items.Count == 0)
                {
                    ((ListBox)e.Row.FindControl("ListBox_DatosVacanteHabilidades")).Visible = false;
                    ((Label)e.Row.FindControl("Label_DatosVacanteNoHabilidades")).Visible = true;
                }
                if (((ListBox)e.Row.FindControl("ListBox_DatosVacanteEspecialidades")).Items.Count == 0)
                {
                    ((ListBox)e.Row.FindControl("ListBox_DatosVacanteEspecialidades")).Visible = false;
                    ((Label)e.Row.FindControl("Label_DatosVacanteNoPostgrados")).Visible = true;
                }
            }
        }
    }
}
